#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <semaphore.h>

#define TAMANO_BUFFER_MAX 50
#define MAX_ITEM 100
#define MAX_RETARDO 3
#define MAX_THREAD 10

sem_t vacio, lleno, mutex;
int n;
void init(sem_t *sem, int valor_inicial) {
   if (sem_init(sem, 0, valor_inicial)) {
      printf("Error inicializando semaforo\n");
      exit(EXIT_FAILURE);
   }
}

void p(sem_t *sem) {
   if (sem_wait(sem)) {
      printf("Error fatal haciendo sem_wait()\n");
      exit(EXIT_FAILURE);
   }
}

void v(sem_t *sem) {
   if (sem_post(sem)) {
      printf("Error fatal haciendo sem_post()\n");
      exit(EXIT_FAILURE);
   }
}

void *productor() {
   
  
        // Produce un item, con retardo aleatorio
      p(&vacio);
      p(&mutex);
      printf("Hola! ");
      v(&mutex);
      v(&lleno);
   
   pthread_exit(NULL);
}

void *consumidor() {
      p(&lleno);
      p(&mutex);
      printf("Mundo\n");
      v(&mutex);
      v(&vacio);

   
   pthread_exit(NULL);
}

int main(int argc, char *argv[]) {
	printf("hola hola");
   pthread_t prod, cons; // hilos
    
   if (argc != 1) {
      printf("Uso correcto: %s \n", argv[0]);
      exit(EXIT_FAILURE);
   }
  

   srand(time(NULL));
   

   init(&mutex, 1);
   init(&vacio, n);
   init(&lleno, 0);
	
	
      if (pthread_create(&prod, NULL, productor, NULL)) {// se creas los hilos productores
         printf("Error creando thread productor\n");
         exit(EXIT_FAILURE);
      }
    
	
   
      if (pthread_create(&cons, NULL, consumidor,NULL )) {// se crean los hilos consumidores
         printf("Error creando thread consumidor\n");
         exit(EXIT_FAILURE);
      }
   

   pthread_exit(NULL);
}

